package swapper.view.controller;

import org.springframework.web.servlet.mvc.SimpleFormController;
import swapper.facade.ProdutoFacade;
import javax.servlet.http.HttpServletRequest;
import org.springframework.web.bind.ServletRequestDataBinder;
import javax.servlet.ServletException;
import java.util.HashMap;
import java.util.Map;
import swapper.facade.CategoriaFacade;
import swapper.facade.EstadoProdutoFacade;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.view.RedirectView;
import swapper.facade.PessoaFacade;
import swapper.model.bean.Categoria;
import swapper.model.bean.EstadoProduto;
import swapper.model.bean.Pessoa;
import swapper.model.bean.Produto;

/**
 *
 * @author Valentino
 */
public class CadastroProdutoController extends AbstractSimpleForm {

    public CadastroProdutoController(){
        super("prod",Produto.class);
    }

    private ProdutoFacade produtofacade;
    private CategoriaFacade categoriafacade;
    private EstadoProdutoFacade estadoprodutofacade;
    private PessoaFacade pessoafacade;
    private Long ProdutoCodigo;
    private boolean logado = false;

    public void setProdutoFacade(ProdutoFacade produtofacade) {
        this.produtofacade = produtofacade;
    }

    public void setCategoriaFacade(CategoriaFacade categoriafacade) {
        this.categoriafacade = categoriafacade;
    }

    public void setEstadoProdutoFacade(EstadoProdutoFacade estadoprodutofacade) {
        this.estadoprodutofacade = estadoprodutofacade;
    }

    public void setPessoaFacade(PessoaFacade pessoafacade) {
        this.pessoafacade = pessoafacade;
    }

    @Override
    protected Object formBackingObject(HttpServletRequest request) throws Exception {
        //Atualiza sessao
        isLogado(request);
        

              
        
        ProdutoCodigo = null;
        try {
            ProdutoCodigo = Long.parseLong(request.getParameter("codigo"));
        } catch (Exception e) {
        }
        if (ProdutoCodigo != null) {
           
            return produtofacade.findByCod(ProdutoCodigo);//Editar produto
        
        }else
        {
            return produtofacade.newProduto();//Dados padrao de Produto novo
        }
        
        
    }

    @Override
    protected Map referenceData(HttpServletRequest request) throws Exception {
        //Atualiza sessao
        isLogado(request);
        
        Map<Object, Object> dataMap = new HashMap<Object, Object>();

        dataMap.put("categoriaLista", categoriafacade.listAll());

        dataMap.put("estadoprodutoLista", estadoprodutofacade.listAll());
        dataMap.put("logado", isLogado(request));
        dataMap.put("pessoaSessao", getPessoaSession(request));

        return dataMap;
    }

    @Override
    protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) throws Exception {

        //Verifica PESSOA DA SESSAO

        if(!isLogado(request)){
            //USUARIO NAO ESTA LOGADO, para imediatamente o processo
            logado = false;
            return;
        }
        logado = true;

        //binder.setDisallowedFields(new String[]{"categoria"});

        //Car car = (Car)binder.getTarget();
        Produto produto = (Produto) binder.getTarget();

        // set car's brand from request parameter brand id
        //BrandManager brandManager = new BrandManager();


        Long CategoriaCodigo = null;
        try {
            CategoriaCodigo = Long.parseLong(request.getParameter("categoria.codigo"));
        } catch (Exception e) {
        }
        if (CategoriaCodigo != null) {

            produto.setCategoria((Categoria) categoriafacade.findByCod(CategoriaCodigo));

        }


        Long PessoaCodigo = null;

        //USANDO PESSOA DA SESSAO
        produto.setPessoa(getPessoaSession(request));
        
//        try {
//            //Aqui tem que settar quem é o usuario logado no sistema para identificar o produto como dele.
//            PessoaCodigo = new Long(1);
//
//        } catch (Exception e) {
//        }
//        if (PessoaCodigo != null) {
//
//            produto.setPessoa((Pessoa) pessoafacade.findByCod(PessoaCodigo));
//
//        }


        Long EstadoProdutocodigo = null;
        try {
            EstadoProdutocodigo = Long.parseLong(request.getParameter("estadoproduto.codigo"));
        } catch (Exception e) {
        }
        if (EstadoProdutocodigo != null) {

            produto.setEstadoproduto((EstadoProduto) estadoprodutofacade.findByCod(EstadoProdutocodigo));

        }


    }

    @Override
    public ModelAndView onSubmit(Object command) throws ServletException {

        if(!logado){
            //Caso nao esteja logado, envia mensagem e redireciona para login
            ModelAndView mav = new ModelAndView("principal");
            mav.addObject("msgLogin", "Por favor, efetue login antes de cadastrar um produto!");
            mav.addObject("logado", isLogado());
            mav.addObject("pessoaSessao", getPessoaSession());
            return mav;
        }
        
        if (ProdutoCodigo != null) {
           
             produtofacade.update((Produto) command);
        
        }else
        {
             produtofacade.addNew((Produto) command);
        }
        
        
        
       
        
        
        return new ModelAndView(new RedirectView(getSuccessView()));
    }
}
